* @parm ioctxt the IO context to restore a domain from
* @return 0 on success, -1 on failure
*/
-int xc_linux_restore(int xc_handle, int io_fd, u32 dom, unsigned long nr_pfns,
- unsigned char *pfn2mfn);
+int xc_linux_restore(int xc_handle, int io_fd, u32 dom, unsigned long nr_pfns);
int xc_linux_build(int xc_handle,
u32 domid,
#define PPRINTF(_f, _a...)
#endif
-int xc_linux_restore(int xc_handle, int io_fd, u32 dom, unsigned long nr_pfns,
- unsigned char *pfn2mfn)
+int xc_linux_restore(int xc_handle, int io_fd, u32 dom, unsigned long nr_pfns)
{
dom0_op_t op;
int rc = 1, i, n, k;
unsigned long *ppage = NULL;
/* A copy of the pfn-to-mfn table frame list. */
- unsigned long *pfn_to_mfn_frame_list = (void *)pfn2mfn; // [1024];
+ unsigned long pfn_to_mfn_frame_list[1024];
/* A table mapping each PFN to its new MFN. */
unsigned long *pfn_to_mfn_table = NULL;
return 1;
}
+ if (read(io_fd, pfn_to_mfn_frame_list, PAGE_SIZE) != PAGE_SIZE) {
+ ERR("read pfn_to_mfn_frame_list failed");
+ goto out;
+ }
+
/* We want zeroed memory so use calloc rather than malloc. */
pfn_to_mfn_table = calloc(4, nr_pfns);
pfn_type = calloc(4, nr_pfns);
int rc =-1;
int io_fd, dom;
unsigned long nr_pfns;
- char *pfn2mfn;
- int pfn2mfn_len;
- PyObject *pfn2mfn_object;
- static char *kwd_list[] = { "fd", "dom", "pfns", "pfn2mfn", NULL };
+ static char *kwd_list[] = { "fd", "dom", "pfns", NULL };
- if ( !PyArg_ParseTupleAndKeywords(args, kwds, "iilO", kwd_list,
- &io_fd, &dom, &nr_pfns,
- &pfn2mfn_object) )
+ if ( !PyArg_ParseTupleAndKeywords(args, kwds, "iil", kwd_list,
+ &io_fd, &dom, &nr_pfns) )
goto exit;
- if (PyString_AsStringAndSize(pfn2mfn_object, &pfn2mfn, &pfn2mfn_len))
- goto exit;
-
- if (pfn2mfn_len != PAGE_SIZE)
- goto exit;
-
- rc = xc_linux_restore(xc->xc_handle, io_fd, dom, nr_pfns, pfn2mfn);
+ rc = xc_linux_restore(xc->xc_handle, io_fd, dom, nr_pfns);
if ( rc != 0 )
{
PyErr_SetFromErrno(xc_error);
"Restore the CPU and memory state of a Linux guest OS.\n"
" dom [int]: Identifier of domain to be restored.\n"
" pfns [int]: Number of pages domain uses.\n"
- " pfn2mfn [str]: String containing the pfn to mfn frame list.\n\n"
"Returns: [int] new domain identifier on success; -1 on error.\n" },
{ "linux_build",
raise XendError(
"not a valid guest state file: pfn count out of range")
- pfn_to_mfn_frame_list = fd.read_exact(PAGE_SIZE,
- "not a valid guest state file: pfn_to_mfn_frame_list read")
-
# XXXcl hack: fd.tell will sync up the object and
# underlying file descriptor
ignore = fd.tell()
- xc.linux_restore(fd.fileno(), int(dominfo.id), nr_pfns,
- pfn_to_mfn_frame_list)
+ xc.linux_restore(fd.fileno(), int(dominfo.id), nr_pfns)
return dominfo
except IOError, ex: